package net.servir.capacidades.service;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import net.servir.capacidades.model.Ambito;
import net.servir.capacidades.model.Diagnostico;
import net.servir.capacidades.model.Distrito;
import net.servir.capacidades.model.Ejecutora;
import net.servir.capacidades.model.EjecutoraRegimen;
import net.servir.capacidades.model.Estudios;
import net.servir.capacidades.model.Etapa;
import net.servir.capacidades.model.GenOption;
import net.servir.capacidades.model.LogAuditoria;
import net.servir.capacidades.model.MayorGradoAcademico;
import net.servir.capacidades.model.ParticipanteBusqueda;
import net.servir.capacidades.model.Profesion;
import net.servir.capacidades.model.Provincia;
import net.servir.capacidades.model.Puesto;
import net.servir.capacidades.model.PuestoTipo;
import net.servir.capacidades.model.Regimen;
import net.servir.capacidades.model.Responsable;
import net.servir.capacidades.model.ResponsableBusqueda;
import net.servir.capacidades.model.ResponsableEjecutoraAmbito;
import net.servir.capacidades.model.ResponsableIdentificacion;
import net.servir.capacidades.model.SegPerfil;
import net.servir.capacidades.model.SegPermiso;
import net.servir.capacidades.model.ServicioCivil;
import net.servir.capacidades.model.ServicioCivilBusqueda;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.SistemaEtapa;
import net.servir.capacidades.model.Snip;
import net.servir.capacidades.model.Test;
import net.servir.capacidades.model.TipoDocumento;
import net.servir.capacidades.model.TipoEstudio;
import net.servir.capacidades.model.TipoObservacion;
import net.servir.capacidades.model.Universidad;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.NivelGobierno;
import net.servir.capacidades.model.Departamento;
import net.servir.capacidades.model.Sector;
import net.servir.capacidades.model.Persona;
import net.servir.capacidades.model.jsp.JspResponsableEdicion;
import net.servir.capacidades.model.jsp.JspUsuarioEdicion;

public interface CapacidadesService {
	
	public LinkedList<Sistema> ObtenerSistema();
	public LinkedList<Ambito> ObtenerAmbito(Number id_sistema);
	public LinkedList<Ejecutora> ObtenerEjecutora(Number id_ejecutora);
	public Integer ObtenerPerfil(String dni, String clave);
	public Sistema GetSistema(Number idSistema);
	public Ejecutora GetEjecutora(Number idEjecutora);
	public List<ResponsableEjecutoraAmbito> ObtenerAmbitosResponsable(Number idResponsable);
	public String ObtenerFechaHoraSistema();
	public String ObtenerFechaSistema();
	public List<Etapa> ObtenerEtapasAmbito(Number idAmbito);
	public List<Etapa> ObtenerEtapasAmbitoPersonalizado(Number responsable,Number idEjecutora, String isFuncionesPersonalizadas, Number id_sistema_etapa);
	
	//-- jm--
	public List<Etapa> ObtenerEtapasNivelGobierno(Number idNivelGobierno, Number idResponsable);
	public List<Etapa> ObtenerEtapasNivelGobiernoSA(Number idNivelGobierno, Number idResponsable,String isFuncionesPersonalizadas,
			Number id_sistema_etapa);
	public boolean TieneOperadoresAsignados(Number id_responsable);
	public Integer AplicaFuncionesPersonalizadas(Number idResponsable);
	public List<Etapa> ObtenerFuncionesOrdenadas(Number idAmbito);
	//--fin--
	public Usuario GetUsuarioIdentificacion(String dni);
	public LinkedList<Ejecutora> ObtenerEjecutorasNivelGobierno(Integer idNivelGobierno, String ubigeo,Integer idSector);
	public List<Provincia> ObtenerProvincias(String coddep);
	public LinkedList<Distrito> ObtenerDistritos(String coddep, String codpro);
	public LinkedList<NivelGobierno> ObtenerNivelGobiernos();
	public LinkedList<Test> ObtenerTestDiagnostico(Integer idAmbito);
	public LinkedList<Test> ObtenerListaTest(Integer idAmbito, Integer idTipoPrueba);
	public LinkedList<Test> ObtenerTestDiagnosticoNoEjecutados(Integer idAmbito);
	public LinkedList<Departamento> ObtenerDepartamentos();
	public LinkedList<Sector> ObtenerSectors();
	public String ObtenerClave(String dni, Integer idSistema);
	public ServicioCivil ObtenerServicioCivil(Number idServicioCivil);
	public LinkedList<Regimen> ObtenerRegimen();
	public LinkedList<SegPerfil> obtenerPerfiles();
	public LinkedList<TipoObservacion> ObtenerTipoObservacion();
	public LinkedList<Profesion> ObtenerProfesion();
	public LinkedList<TipoDocumento> ObtenerTipoDocumento();
	public List ObtenerFunciones(Number idServicioCivil);
	public List<Number> ObtenerIdFuncionesSC(Number idServicioCivil);
	public String EditarCorreo(ServicioCivil obj);
	public String recuperarClave(String dni, Integer idSistema);
	public LinkedList<LogAuditoria> ObtenerLogAuditoria(String dni);
	public List ObtenerDatosPrueba(Integer idTest,Integer idSistema,Integer idAmbito);
	/*=====================================================
	 *=========== SERVICE RESPONSABLE EDICION =============
	 *=====================================================
	 */
	public Responsable GetResponsablePorDNI(String dni, Number idAmbito);
	public Responsable GetResponsable(Number idResponsable);
	public ServicioCivil ObtenerServicioCivilPorDNI(String dni, Number id_persona, Number id_ambito);
	public List<Diagnostico> ObtenerDiagnosticos();
	public Diagnostico GetDiagnostico(Number idDiagnostico);
	public Persona GetPersona(Responsable responsable);
	public Persona GetPersona(String dni);
	public Persona GetPersona(String dni, Number idAmbito);
	public Persona GetPersonaPorEmail(String email, Number idAmbito);

	//
	public void EliminarParticipante(JspResponsableEdicion obj);
	public Responsable GetResponsablePorEjecutora(Number idEjecutora);
	public Integer grabarNuevoResponsable(JspResponsableEdicion obj,Vector<Object> funciones);
	public Integer grabarResponsablePersona(JspResponsableEdicion obj);
	public void grabarResponsable(JspResponsableEdicion obj,Vector<Object> funcionesPersonalizadas);
	public void grabarValidacion(Persona persona,Number IdEjecutora);
	
	/*=====================================================
	 *=========== SERVICE RESPONSABLE BUSQUEDA ============
	 *=====================================================
	 */
	public LinkedList<GenOption> ObtenerEstadosResponsable();
	public LinkedList<GenOption> ObtenerEstadosOperadores();
	public LinkedList<GenOption> ObtenerPerfiles();
	public LinkedList<GenOption> ObtenerEstadosInscritos();
	public LinkedList<GenOption> ObtenerEstadosPlazo();
	/*=====================================================
	 *========= SERVICE SERVICIO CIVIL EDICION ============
	 *=====================================================
	 */
	public ResponsableIdentificacion GetResponsableIdentificacion(String dni);
	public String VerificarExisteDNI(String dni, Number idEjecutora);
	public String verificarExisteDNI(String dni);
	public void EliminarServicioCivil(ServicioCivil obj);
	public String AgregarServicioCivil(ServicioCivil obj);
	public String agregarUsuario(JspUsuarioEdicion obj);
	public String AgregarFuncionesSC(Number idServicioCivil, String listaFunciones, Number idAmbito);
	public String EditarServicioCivil(ServicioCivil obj);
	public void grabarObservacion(ServicioCivil obj);
	public void grabarSubsanacion(ServicioCivil obj);
	public void grabarValidacion(ServicioCivil obj);
	public void grabarInvalidacion(ServicioCivil obj);
	//VIENE DE CENSO
	public LinkedList<ResponsableIdentificacion> ObtenerResponsableIdentificacion(String dni);
	public List ObtenerServicioCivilBusquedaFromSql(String string);
	public Number cargarResultadosBusqueda(String vSql, String dniResponsable, Integer tipo);
	public List ObtenerDestinatariosCorreo(String dni);
	public String ObtenerQueryDestinatariosCorreo(String dni);
	public LinkedList<Test> ObtenerTestDiagnoticoPorDNI(String dni, Number id_persona);
	public void grabarInvalidacion(Persona persona, Number IdEjecutora);
	public void grabarInhabilitacion(JspResponsableEdicion obj);
	public String recuperarNuevaClave(ServicioCivil obj);
	public String ObtenerDescEtapaFuncion(Number idFuncion);
	public List ObtenerActividades(Number idFuncion);
	public LinkedList<EjecutoraRegimen> ObtenerRegimenes();

	/* @JZM-29012013 Arson
	 * Se añade soporte para saber si una ejecutora tiene un responsable asignado
	 */
	
	public Integer tieneResponsableLaEjecutora(Integer id_ejecutora);
	public void actualizarResponsableDeEjecutora(JspResponsableEdicion obj, Responsable responsableActual);
	//public void actualizarResponsableDeEjecutora(JspResponsableEdicion obj);
	public Persona GetOtraPersonaPorEmail(Integer id_persona, String email, Number idAmbito) ;
	public Persona GetOtraPersonaPorDni(Integer id_persona, String dni, Number idAmbito);
	public List<String> getParametroCorreo();
	public String VerificarExisteOtroDNI(String dni, Number idAmbito,
			Number idServicioCivil);
	public String VerificarExisteOtroCorreo(String correo, Number idAmbito, Number idServicioCivil);
	
	//--- jp ---
	public LinkedList<Estudios> ObtenerEstudios();
	public LinkedList<MayorGradoAcademico> ObtenerMayorGradoAcademico();
	public LinkedList<Snip> ObtenerSnip();
	public String ObtenerTituloUniversitario(Number idServicioCivil);
	//--- fin ---
	
	
	public List ObtenerFuncionesSeleccionadasResponsable(Number id_ejecutora, Number id_ambito,Number id_responsable);
	public int ObtenerNroFuncionesP(Number idNivelGobierno,Number idEjecutora);
	public Integer ObtenerIdNivelGobierno(Number idEjecutora);
	public List<Etapa> getEtapasNivelGobierno(Number idEjecutora, Integer aplicaFuncionPersonalizada);
	public String obtenerListaFunciones(Number id_ejecutora);
	public void eliminarDestinariosCorreoEnviados(Number id_servicio_civil, String dniUsuario);
	public LinkedList<SistemaEtapa> ObtenerSistemaEtapa();
	public void mailFinalizaCenso(Number idResponsable,Number idSistema, Number idAmbito);
	public LinkedList<SistemaEtapa> ObtenerSistemaEtapa(Number idAmbito);
	public Number validacionMasiva(String vSql);
	public PuestoTipo getPuestoTipo(Number idPuestoTipo);
	
	public LinkedList<Universidad> getUniversidades();
	
	public Number fechaFinalizacionMasiva(String vsql, String fechaFinalizacion);
	public Number habilitacionMasiva(String vSql, String fecHabilitacion, String plazo);
	
	public LinkedList<TipoEstudio> getTipoEstudio();
	
	public void setFlagVisualizoCorreo(String dni);
	public Integer getFlagVisualizoCorreo(String dni);
}
